EventBridge経由でMicrosoft Teamsにイベント通知する
はじめに
こんにちは。大阪オフィスの林です。
EventBridge経由でMicrosoft Teamsにイベント通知する検証を行う機会がありましたので、内容をまとめておきたいと思います。簡単なアーキテクチャですが下記の通りとなります。
なお、今回の検証では下記の情報を参考にしています。
ウェブフックを使用して Amazon SNS メッセージを Amazon Chime、Slack、または Microsoft Teams に発行する方法を教えてください。
やってみた
Teams側の準備
通知用のチームを作成します。今回は新規作成していますが、既存のチームでも問題ありません。
チームを選択した状態で右上のメニューから「コネクタ」を選択します。
「Incoming-Webhook」を検索し「追加」を選択します。
再び「Incoming-Webhook」を検索し「構成」を選択します。
AWS側の作業
Lambdaの作成
Lambdaのダッシュボードに移動し、「関数の作成」を選択します。
任意の関数名を入力します。今回の検証ではラインタイムにPython 3.9
を選択します。
url = "https://xxxxxxx"
に先ほどコピーしたWebhookURLに置き換え、以下のコードを貼り付け、Deployを選択します。
import urllib3 import json http = urllib3.PoolManager() def lambda_handler(event, context): url = "https://xxxxxxx" msg = { "text": event['Records'][0]['Sns']['Message'] } encoded_msg = json.dumps(msg).encode('utf-8') resp = http.request('POST',url, body=encoded_msg) print({ "message": event['Records'][0]['Sns']['Message'], "status_code": resp.status, "response": resp.data })
Webhookが機能するか確認します。「Test」から「Configure test event」を選択します。
「新しいテストイベントの作成」が選択されている状態で、「イベントテンプレート」に「sns-notification」を選択し、「イベント名」に任意の名前を入力後、作成を選択します。
status code
の戻り値に200
が返ってきたことを確認します。
Teams側でexample message
というメッセージが通知されていることを確認します。
SNSの作成
SNSのダッシュボードに移動し、トピック名を入力し「次のステップ」を選択します。
今回は「スタンダード」を選択し、任意の名前、表示名を入力します。
左のメニューから「サブスクリプション」-「サブスクリプションの作成」を選択します。
「トピックARN」に上記で作成したSNSトピックのARNを指定し、「プロトコル」に「AWS Lambda」を選択後、「エンドポイント」に作成したLambdaのARNを指定し、サブスクリプションの作成を選択します。
EventBridgeの作成
EventBridgeのダッシュボードに移動し、左メニュー「ルール」-「ルールの作成」を選択します。※既存のルールに通知を追加する場合は、対象のルールを編集し手順を進めて下さい。
任意の名前と説明を入力し、パターンを定義でトリガーを指定します。今回の検証ではGuardDutyのSeverityが7.0以上のFindingを通知対象とします。
ターゲットに「SNSトピック」、トピックに先ほど作成したトピックを選択します。※既存のルールに通知を追加する場合は、「ターゲットの追加」を選択し同様の手順を進めて下さい。
今回の検証では入力トランスフォーマーを使用して検知したFindingのタイトルと、Findingへのリンクのみ通知対象とし「作成」を選択します。
通知のテスト
まとめ
比較的簡単にMicrosoft Teamsへの通知まで実装することが出来ました。通知内容のカスタマイズなどは別途必要かもしれませんが、最低限の通知をMicrosoft Teamsで受けたいという要件に対してはかなりスピーディに対応出来そうな内容では無いでしょうか。参考になりましたら幸いです。
以上、大阪オフィスの林がお送りしました!